#ifndef GECAMERA
#define GECAMERA

#include "GE_Base.h"
namespace Syp
{
///A camera describes how the world is viewed and from which position/direction.
class SYPAPI Camera : public Node
{
public:
static Camera* createCamera();
static void destroyCamera(Camera *cam);

///updates camera position based on animation
void update();
///Loads an animation sequence from a file
void loadCameraFromFile(String filename);
///Returns whether camera is animated
bool isAnimated();
///Enables/Disables the camera animation.
void setAnimation(bool enabled);
///Returns the camera's FOV.
float getFOV();
///Returns the camera's aspect
float getAspect();
///Returns the Camera's nearClip value
float getNearClip();
///Returns the Camera's farClip value
float getFarClip();
///Returns the camera's animation playback speed
float getAnimSpeed();
///Sets the camera's nearClip
void setNearClip(float near);
///Sets the camera's farClip
void setFarClip(float far);


private:
Camera():fov(50.0f),aspect(1.3333f),nearClip(10.0f),farClip(8000.0f), speed(1.0f), animate(false),AnimTime(0.0f)
{
};
~Camera(){};
///Name of Camera
String name;
///Time of animation in seconds at which this instance is playing at.
float AnimTime;
///Total Length of animation in seconds
float AnimLength;
///Toggles animation
bool animate;
///Key frames
std::vector<KeyFrame> KFrame; 
///Field of View in degrees parameter. Default is 50 degrees.
float fov;
///The aspect of the camera. Usually width/height.
float aspect;
///Near clipping plane of camera. Default is 10.0f. Making this parameter too small will result in Z-Fighting.
float nearClip;
///Far clipping plane of camera. Polygons beyond this plane will not be rendered.
float farClip;
///Animation playback rate, default is 1.0f
float speed;



};
}
#endif

